package 剑指offer;

import java.util.ArrayList;
import java.util.HashMap;
import java.util.Scanner;

/** 

* @author ：soulstones
* @version ：2019年9月30日 下午10:04:49 
* @Description：
* 
请实现一个函数用来找出字符流中第一个只出现一次的字符。例如，当从字符流中只读出前两个字符"go"时，第一个只出现一次的字符是"g"。当从该字符流中读出前六个字符“google"时，第一个只出现一次的字符是"l"。
*/
public class A54字符流中第一个不重复的字符 {

//使用一个HashMap来统计字符出现的次数，
	//同时用一个ArrayList来记录输入流，每次返回第一个出现一次的字符都是在这个ArrayList（输入流）中的字符作为key去map中查找。
	 

		HashMap<Character, Integer> map=new HashMap();
		    ArrayList<Character> list=new ArrayList<Character>();
		    //Insert one char from stringstream
		    public   void Insert(char ch)
		    {
		        if(map.containsKey(ch)){
		            map.put(ch,map.get(ch)+1);
		        }else{
		            map.put(ch,1);
		        }
		         
		        list.add(ch);
		    }
		     
		    //return the first appearence once char in current stringstream
		    public char FirstAppearingOnce()
		    {   char c='#';
		        for(char key : list){
		            if(map.get(key)==1){
		                c=key;
		                break;
		            }
		        }
		         
		        return c;
		    }
    
		    public static void main(String[] args) {
				Scanner scanner = new Scanner(System.in);
				String s = scanner.next();
				char[] ch = s.toCharArray();
				A54字符流中第一个不重复的字符 instance = new A54字符流中第一个不重复的字符();
				for (int i = 0; i < ch.length; i++) {
					instance.Insert(ch[i]);
				}
				char res = instance.FirstAppearingOnce();
				System.out.println(res);
			}
    
}
